/**
 * Command to init a project. This will create the .config.json file if it
 * doesn't already exist.
 */

'use strict';

const chalk = require('chalk');
const fs = require('fs');
const path = require('path');
const untildify = require('untildify');

module.exports = function(vorpal, app) {
  vorpal
    .command('init')
    .description('Initializes a .config.json file for use')
    .action(function(args) {
      return new Promise((resolve, reject) => {
        fs.stat(app.PATH_TO_CONFIG, (err, stats) => {
          if (stats) {
            this.log('Config file exists, nothing to do.');
            reject();
            return;
          }

          this.prompt([
            {
              name: 'githubToken',
              type: 'input',
              message: `${chalk.bold('GitHub token?')} ${chalk.grey('(needs "repo" privs)')} `,
            },
            {
              name: 'reactPath',
              type: 'input',
              message: `${chalk.bold('Location of local React checkout?')} `,
              validate: input => {
                let npath = path.normalize(untildify(input));

                if (npath === '.') {
                  return 'Cannot be `.`';
                }

                let stats;
                try {
                  stats = fs.statSync(npath);
                } catch (e) {
                  return `Error: ${e}`;
                }

                if (!stats.isDirectory()) {
                  return `${npath} is not a directory.`;
                }

                // TODO: Look for markers indicating this is a React checkout.
                return true;
              },
            },
          ]).then(answers => {
            fs.writeFile(
              app.PATH_TO_CONFIG,
              JSON.stringify(answers, null, 2),
              err => {
                if (err) {
                  this.log('Error writing config file.', err);
                  reject();
                }
                resolve();
              }
            );
          });
        });
      });
    });
};
